#include "Bonus.h"


// initialisation et liberation de la procedure
void initBonus(Bonus *b)
{
	b->idBonus= 0;
	b->visibilite= 0;
	b->dimXBonus= 0;
	b->dimYBonus= 0;
	b->posXBonus= 0;
	b->posYBonus= 0;
}

void parametreBonus (Bonus *b, int visibilite, int idBonus, int dimX, int dimY, int posX, int posY)
{
    setidBonus(b,idBonus);
    setvisibiliteBonus(b,visibilite);
    setdimXBonus(b,dimX);
    setdimYBonus(b,dimY);
    setposXBonus(b,posX);
    setposYBonus(b,posY);
}

/* Fonctions inutilisee, car on alloue dans la pile */
void libereBonus (Bonus *b)
{
	assert(b!=NULL);
    free(b);
}
//asseceurs
int getidBonus(const Bonus *b)
{
	assert(b!=NULL);
	return b->idBonus;
}

int getvisibiliteBonus (const Bonus *b)
{
    assert (b!=NULL);
    return b->visibilite;
}

int getdimXBonus(const Bonus *b)
{
	assert (b!=NULL);
	return b->dimXBonus;
}
int getdimYBonus(const Bonus *b)
{
	assert(b!=NULL);
	return b->dimYBonus;
}
int getposXBonus (const Bonus *b)
{
	assert(b!=NULL);
	return b->posXBonus;
}
int getposYBonus (const Bonus *b)
{
	assert(b!=NULL);
	return b->posYBonus;
}
//Mutateurs
void setidBonus (Bonus *b, int idBonus)
{
	assert (b!=NULL);
    b->idBonus= idBonus;
}

void setvisibiliteBonus (Bonus *b, int visibilite)
{
    assert (b!=NULL);
    assert ((visibilite==0)||(visibilite==1));
    b->visibilite=visibilite;
}
void setdimXBonus(Bonus *b, int dimX)
{
	assert (b!=NULL);
    assert (dimX >= 0);
    b->dimXBonus= dimX;
}
void setdimYBonus (Bonus *b, int dimY)
{
	assert (b!=NULL);
    assert (dimY >= 0);
    b->dimYBonus= dimY;
}
void setposXBonus (Bonus *b, int posX)
{
	assert (b!=NULL);
    assert (posX >= 0);
    b->posXBonus= posX;
}
void setposYBonus (Bonus *b, int posY)
{
    assert (b!=NULL);
    assert (posY >= 0);
    b->posYBonus=posY;
}

//Gestion des bonus
/**
@brief Deplace le bonus en fonction du sens, et teste la position
@param Pointeur sur bonus, sens
@return -1 si collision a droite, 1 si collision a gauche, 0 sinon
**/
int deplacerBonus (Bonus *b, int sens)
{
	assert (b!=NULL);
    int posX;
    int aleatoireBordDroit;
    int aleatoireBordGauche;

    posX=getposXBonus(b);
    aleatoireBordDroit=rand()%60;
    aleatoireBordGauche=rand()%60;
    /*Deplacement du bonus */
    if(sens==1)
    {
        b->posXBonus= posX+1; //Déplacement à droite
    }
    if (sens==-1)
    {
        b->posXBonus= posX-1;//Déplacement à gauche
    }

    /* On teste si la position du bonus est toujours bonne */
    if (posX>= 700+aleatoireBordDroit)
    {
        return -1;
    }
    else
     {
        if (posX<=100-aleatoireBordGauche)
        {
            return 1;
        }
            else
            {
                return 0;
            }
     }
}

//Test de non-régression
void testRegressionBonus()
{
    printf("###  Test du module bonus ### \n");

	Bonus bonus;

	//test des fonctions d'initialisation
    initBonus (&bonus);

    printf("-- Fonctions d'initialisation testees avec succes -- \n");

	//test des accesseurs et mutateurs
	assert(getidBonus(&bonus) == 0);
	assert(getvisibiliteBonus(&bonus)==0);
	assert(getdimXBonus(&bonus) == 0);
	assert(getdimYBonus(&bonus) == 0);
	assert(getposXBonus (&bonus) == 0);
	assert(getposYBonus (&bonus) == 0);

	setidBonus (&bonus, 1);
	setvisibiliteBonus(&bonus, 1);
	setdimXBonus(&bonus, 1);
	setdimYBonus (&bonus, 1);
	setposXBonus (&bonus, 1);
	setposYBonus (&bonus, 1);

	assert(getidBonus(&bonus) == 1);
    assert(getvisibiliteBonus(&bonus)==1);
	assert(getdimXBonus(&bonus) == 1);
	assert(getdimYBonus(&bonus) == 1);
	assert(getposXBonus (&bonus) == 1);
	assert(getposYBonus (&bonus) == 1);


	printf("-- Accesseurs et mutateurs testes avec succes  -- \n");

    printf("***  Test du module bonus realise avec succes *** \n\n\n");



}


